/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package dao;

import beans.PuntosAmigo;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 *
 * @author nMoncho
 */
public class PuntosAmigosDao {

    private static List<PuntosAmigo> puntos;

    public static List<PuntosAmigo> getPuntosAmigos(){
        if (puntos == null) {
            Session session = SimpleSessionFactory.getSessionFactory(null).openSession();
            Query q = session.createQuery("from beans.PuntosAmigo punto order by punto.cantidadMinima");

            puntos = q.list();

            session.close();
        }
        return puntos;
    }

    public static int getPuntaje(int cantidadInvitados){
        if(puntos == null)
            getPuntosAmigos();

        int puntaje = 0;
        for(PuntosAmigo punto : puntos){
            if(cantidadInvitados >= punto.getCantidadMinima())
                puntaje = punto.getPuntos();
        }
        
        return puntaje;
    }

    public static boolean saveOrUpdate(List<PuntosAmigo> puntajes){
        Session session = SimpleSessionFactory.getSessionFactory(null).openSession();
        try{
            session.beginTransaction();

            for(PuntosAmigo puntaje : puntajes){
                session.saveOrUpdate(puntaje);
            }
            
            session.getTransaction().commit();

            return true;
        }catch(Exception ex){
            if(session != null && session.isOpen())
                session.getTransaction().rollback();

            return false;
        }finally{
            session.close();
        }
    }

    public static boolean delete(List<PuntosAmigo> puntajes){
        Session session = SimpleSessionFactory.getSessionFactory(null).openSession();
        try{
            session.beginTransaction();

            for(PuntosAmigo puntaje : puntajes){
                session.delete(puntaje);
            }

            session.getTransaction().commit();

            return true;
        }catch(Exception ex){
            if(session != null && session.isOpen())
                session.getTransaction().rollback();

            return false;
        }finally{
            session.close();
        }
    }

    public static boolean saveOrUpdateOrDelete(List<PuntosAmigo> saves, List<PuntosAmigo> deletes){
        Session session = SimpleSessionFactory.getSessionFactory(null).openSession();
        try{
            session.beginTransaction();

            for(PuntosAmigo puntaje : saves){
                session.saveOrUpdate(puntaje);
            }

            for(PuntosAmigo puntaje : deletes){
                session.delete(puntaje);
            }

            session.getTransaction().commit();

            return true;
        }catch(Exception ex){
            if(session != null && session.isOpen())
                session.getTransaction().rollback();

            ex.printStackTrace();
            
            return false;
        }finally{
            session.close();
        }
    }

}
